#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>










struct ListNode {
   int val;
     struct ListNode *next;
 };






typedef struct ListNode ListNode;
ListNode* BuyNode(int n)
{
	ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
	if (newnode == NULL)
	{
		exit(1);
	}
	newnode->val = n;
	newnode->next = NULL;
	return newnode;
}

ListNode* CreatCircle(int n)
{
	ListNode* newHead, * newTail;
	newHead = newTail = BuyNode(1);
	for (int i = 2; i <= n; i++)
	{
		newTail->next = BuyNode(i);
		newTail = newTail->next;
	}
	newTail->next = newHead;
	return newTail;
}

int ysf(int n, int m) {
	ListNode* prev, * pcur;
	prev = CreatCircle(n);
	pcur = prev->next;
	int count = 1;
	while (pcur->next != pcur)
	{
	
		if (count == m)
		{
			prev->next = pcur->next;
			free(pcur);
			pcur = prev->next;
			count = 1;
		}
		else {
			prev = pcur;
			pcur = pcur->next;
			count++;
		}
	}
	return pcur->val;
}




int main()
{
	int n, m;
	scanf("%d %d", &n, &m);
int arr=ysf(n, m);
	return 0;
}

 //struct ListNode {
 //   int val;
 //     struct ListNode *next;
 // };
 //


 //typedef struct ListNode  ListNode;


 //ListNode* BuyNode(n)
 //{
	// ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
	// if (newnode == NULL)
	// {
	//	 exit(1);
	// }
	// newnode->val = n;
	// newnode->next = NULL;
 //}

 //ListNode* CreatCircle(n)
 //{
	// ListNode* newHead, * newTail;
	// newHead = newHead = BuyNode(1);
	// for (int i = 2; i <= n; i++)
	// {
	//	 newTail->next = BuyNode(i);
	//	 newTail = newTail->next;
	// }
	// return newTail;
 //}

 //int ysf(int n, int m) {
	// ListNode* prev, * pcur;
	// prev = BuyNode(0);
	// pcur = prev->next;
	// while (pcur->next != pcur)
	// {
	//	 int count = 1;
	//	 if (count == m)
	//	 {
	//		 prev->next = pcur->next;
	//		 pcur = prev->next;
	//		 count = 1;
	//	 }
	//	 else {
	//		 prev->next = pcur;
	//		 pcur = pcur->next;
	//		 count++;
	//	 }
	// }
	// return pcur->val;
 //}
























//
//
//
//#if 0
// struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
// {
//
//	 ListNode* l1, * l2, * newHead, * newTail;
//	 l1 = list1;
//	 l2 = list2;
//	 newHead = newTail = (ListNode*)malloc(sizeof(ListNode));
//	 if (l1 == NULL)
//	 {
//		 return l2;
//	 }
//	 if (l2 == NULL)
//	 {
//		 return l2;
//	 }
//	 while (l1 && l2)
//	 {
//		 if (l1->val > l2->val)
//		 {
//			 newTail->next = l2;
//			 newTail = newTail->next;
//			 l2 = l2->next;
//		 }
//		 else
//		 {
//			 newTail->next = l1;
//			 newTail = newTail->next;
//			 l1 = l1->next;
//		 }
//
//		 if (l1)
//		 {
//			 newTail-> next= l1;
//		 }
//		 if (l2)
//		 {
//			 newTail->next = l2;
//		 }
//		
//	 }
//
//	 ListNode* ret = newHead->next;
//	 free(newHead);
//	 newHead = NULL;
//	 return ret;
// }
//#endif
//
//
//
//
//
//
//
//
//
//}
//#include<stdio.h>
//int main()
//{
//	
//	return 0;
//}